package com.xinggq.auth.service.config;

import com.xinggq.auth.api.enums.SessionManagementStrategy;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 认证服务配置属性
 * 
 * @author xinggq
 * @since 2024-01-01
 */
@Data
@Component
@ConfigurationProperties(prefix = "box.auth")
public class AuthProperties {

    /**
     * 默认认证类型
     * 对应 AuthenticationSourceType 枚举值
     */
    private String defaultAuthenticationType;
    
    /**
     * 令牌有效期（秒）
     * 默认7200秒（2小时）
     */
    private long tokenValiditySeconds = 7200;
    
    /**
     * 刷新令牌有效期（秒）
     * 默认259200秒（3天）
     */
    private long refreshTokenValiditySeconds = 259200;
    
    /**
     * 是否允许多端登录
     * @deprecated 使用 sessionManagementStrategy 替代
     */
    @Deprecated
    private boolean allowMultiLogin = true;
    
    /**
     * 会话管理策略
     * 默认为允许多端登录
     */
    private String sessionManagementStrategy = SessionManagementStrategy.ALLOW_MULTIPLE.getCode();
    
    /**
     * 最大并发会话数
     * 仅在 sessionManagementStrategy 为 LIMITED_CONCURRENT 时生效
     */
    private int maxConcurrentSessions = 3;
    
    /**
     * Redis中Token的前缀
     */
    private String tokenPrefix = "auth:token:";
    
    /**
     * Redis中刷新Token的前缀
     */
    private String refreshTokenPrefix = "auth:refresh_token:";
    
    /**
     * Redis中用户会话的前缀
     */
    private String userSessionPrefix = "auth:user_session:";
}